package xin.ryven.car.android.utils

import android.content.Context
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import xin.ryven.car.android.network.NetworkConfig
import xin.ryven.car.android.ui.LoginDialog
import xin.ryven.car.android.utils.TokenManager.clearToken

object AuthManager {
    
    /**
     * 检查用户是否已登录
     */
    fun isLoggedIn(context: Context): Boolean {
        return TokenManager.getToken(context) != null
    }
    
    /**
     * 手动显示登录对话框
     */
    fun showLoginDialog(context: Context, onLoginSuccess: () -> Unit = {}) {
        if (context is android.app.Activity) {
            val authApi = NetworkConfig.getAuthApi(context)
            LoginDialog(
                context = context,
                authApi = authApi,
                onLoginSuccess = onLoginSuccess
            ).show()
        }
    }
    
    /**
     * 登出用户
     */
    fun logout(context: Context) {
        TokenManager.clearToken(context)
    }
    
    /**
     * 测试网络连接
     */
    fun testConnection(context: Context, onResult: (Boolean) -> Unit) {
        CoroutineScope(Dispatchers.Main).launch {
            val result = NetworkTestUtils.testConnection(context)
            onResult(result)
        }
    }
    
    /**
     * 获取带认证的API服务
     * 如果用户未登录，会自动显示登录对话框
     */
    fun getAuthenticatedApiService(context: Context, onReady: (api: Any) -> Unit) {
        if (isLoggedIn(context)) {
            // 用户已登录，直接返回API服务
            val apiService = NetworkConfig.getApiService(context)
            onReady(apiService)
        } else {
            // 用户未登录，显示登录对话框
            showLoginDialog(context) {
                val apiService = NetworkConfig.getApiService(context)
                onReady(apiService)
            }
        }
    }
    
    /**
     * 测试登录对话框（用于开发测试）
     */
    fun showTestLoginDialog(context: Context) {
        if (context is android.app.Activity) {
            // 先清除token，模拟未登录状态
            clearToken(context)
            
            val authApi = NetworkConfig.getAuthApi(context)
            LoginDialog(
                context = context,
                authApi = authApi,
                onLoginSuccess = {
                    android.widget.Toast.makeText(context, "🎉 登录测试成功！", android.widget.Toast.LENGTH_LONG).show()
                }
            ).show()
        }
    }
} 